<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
      ①确定dp数组和下标含义：dp[i]表示正整数i拆分后的乘积最大值为dp[i]
      ②状态转移方程：
      dp[2]=1*1
      dp[3]=1*2 或者 1*1*2 求最大值
      因此dp[3]=1*dp[2] 或者1*1*1
      即后面那个数可拆可不拆。
      因此也需要额外导入一个变量j,j<i
      //注意，因为j是循环的，所以我们还需要比较dp[i]的最大值
      dp[i]=Math.max(j*dp[i-j],j*(i-j),dp[i])
      ③初始化dp数组
      dp[0]=0
      dp[1]=1
      dp[2]=1

      */
      var integerBreak = function (n) {
        let dp = new Array(n + 1).fill(0)
        dp[2] = 1
        for (let i = 3; i <= n; i++) {
          for (let j = 1; j < i; j++) {
            dp[i] = Math.max(dp[i], i * (i - j), i * dp[i - j])
          }
        }
        return dp[n]
      }
    </script>
  </body>
</html>
